#ifndef	_J_POZIVI_JEZGRE_H_
#define	_J_POZIVI_JEZGRE_H_

#include "vrijeme.h"
#include "tipkovnica.h"
#include "dretve.h"
#include "procesi.h"
#include "sinkronizacija.h"
#include "dogadjaji.h"

#include <pozivi_jezgre.h>

/* Za dodat novu jezgrinu funkciju koja se poziva mehanizmom programskog prekida
   treba:
	1. funkcija mora biti tipa:	int funkcija(void *);

	2. definira se ID funkcije = ime u 'enum' (sucelje/pozivi_jezgre.h)
	
	3. ubacit adresu funkcije u 'j_fun' (malo ispod) - mora biti na
	   istom mjestu kao i njen ID!
	
   Funkcija se poziva sa:	pv = J_FUNKCIJA(ID, pokazivac_na_parametar);
*/

//funkcija koja prihvaca programske prekide i poziva odgovarajucu jezgrinu f.
void j_pozivi_jezgre(int id, void *kontekst);


#ifdef	_J_POZIVI_JEZGRE_C_

typedef int (*jfunkcija) (void *);


//deklaracija funkcija

// primjeri iz pozivi_jezgre.c
int funkcija1 (void *x);
int funkcija2 (void *x);
int funkcija3 (void *x);

//popis kazaljki na funkcije koje obradjuju odgovarajuci poziv
static jfunkcija j_fun[BROJ_J_FUNKCIJA] = {
	funkcija1,
	funkcija2,
	funkcija3,
	
	j_stvori_dretvu,
	j_dretva_odstupi,
	j_dretva_zavrsetak,
	j_zavrsi_dretvu,
	j_id_dretve,
	j_dohvati_prioritet,
	j_dohvati_nacin_rasporedjivanja,
	j_postavi_prioritet,
	j_cekaj_kraj_dretve,
	//j_zaustavi_latentnu_dretvu,

	j_stvori_proces,
	j_zavrsi_proces,

	j_dohvati_sinkro,
	j_obrisi_sinkro,
	j_propusti_sinkro,
	j_cekaj_sinkro,

	j_alarm_dohvati,
	j_alarm_postavi,
	j_alarm_obrisi,
	j_dohvati_trenutni_sat,
	
	j_tipkovnica_dohvati,

	//dogadjaji
	j_stvori_red_dogadjaja,
	j_obrisi_red_dogadjaja,
	j_prijavi_se_na_red_dogadjaja,
	j_postavi_dogadjaj,
	j_kraj_obrade_dogadjaja,
	j_dohvati_dogadjaj,

	j_ispisi_v
};

#endif	/* _J_POZIVI_JEZGRE_C_ */
#endif	/* _J_POZIVI_JEZGRE_H_ */